﻿using System.Collections.Generic;
using SistemaFinanceiro.classes.core;

namespace SistemaFinanceiro.classes.negocio.cartao
{
    public abstract class GenericoNegocio<T> where T : GenericoClasse
    {

        public abstract IGenericoDAO<T> GetDAO();

        public virtual T Inserir(T item)
        {
            if (Validar(item))
            {
                return GetDAO().Inserir(item);
            }
            return default(T);
        }

        public virtual void Remover(T item)
        {
            GetDAO().Remover(item);
        }

        public virtual T Salvar(T item)
        {
            if (Validar(item))
            {
                return GetDAO().Salvar(item);
            }
            return default(T);
        }

        public virtual List<T> Listar()
        {
            return GetDAO().Listar();
        }

        public virtual List<T> ListarPorPropriedade(string nomePropriedade, object valor)
        {
            return GetDAO().ListarPorPropriedade(nomePropriedade, valor);

        }

        public virtual T ProcurarPorPropriedade(string nomePropriedade, object valor)
        {
            return GetDAO().ProcurarPorPropriedade(nomePropriedade, valor);
        }

        public abstract bool Validar(T entity);

    }
}
